﻿// 毕业学期 GRADUATION.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

/*
https://algospot.com/judge/problem/read/GRADUATION

大一学生太信任“大一是玩的”这个前辈的话，放弃了所有专业课程并且在通识课上拿到了全部 F 分。现在他对自己的行为感到后悔，因为他需要在毕业前修满很多学分。为了达到毕业的必修学分要求，他必须修读专业课中的至少 K 门。然而，每门课都有先修课程，并且每个学期并不会开设所有课程，这使问题变得复杂起来。现在问题是，他应该如何才能在最短的学期内毕业？

给定每门课程的信息以及未来 M 个学期将开设的课程列表，请编写一个程序来计算出他需要最少上多少个学期才能毕业。如果无法在 M 个学期内毕业，则输出 "IMPOSSIBLE"。

输入：

测试用例的数量 C（C <= 50）
每个测试用例的第一行包含专业课程的数量 N（1 <= N <= 12），需要修读的课程数量 K（0 <= K <= N），学期数量 M（1 <= M <= 10）以及他每个学期最多可以修读的课程数量 L（1 <= L <= 10）
接下来的 N 行按顺序列出每门课程的信息：
先给出该课程的先修课程数量 Ri（0 <= Ri <= N-1）
然后是 Ri 个整数，表示该课程的先修课程编号
接下来的 M 行列出每个学期的信息：
给出该学期开设的课程数量 Ci（1 <= Ci <= 10）
然后是 Ci 个整数，表示开设的课程编号
输出：

对于每个测试用例，输出他需要上多少个最小学期才能毕业
如果无法在 M 个学期内毕业，则输出 "IMPOSSIBLE"
示例输入：
2
4 4 4 4
0
1 0
3 0 1 3
0
4 0 1 2 3
4 0 1 2 3
3 0 1 3
4 0 1 2 3
4 2 2 4
1 1
0
1 3
1 2
3 0 2 3
3 1 2 3

示例输出：
3
IMPOSSIBLE
*/
int main()
{
    std::cout << "Hello World!\n";
}

 
